package com.site.core.rewrite.type;

import java.util.HashMap;
import java.util.Map;

/**
 * 文章重写类型
 * 例：从 英语->西班牙语->德语->英语 的转换
 * @author Administrator
 *
 */
public abstract class RewriteType {

	
	// 以map<lang_n, lang_m> 的形式存放，存一份转换的路由信息
	// lang_n -> lang_m  lang_m -> lang_k  lang_k -> lang_t
	protected Map<String, String> map = new HashMap<String, String>();
	
	protected String firstLang = null;
	protected String langIndex = null;
	
	// 路由是否到达终点
	private boolean finish = false;
	
	public RewriteType(){
		init();
		langIndex = firstLang;
		
		// 校验数据设置是否正确
		verity();
	}
	
	/**
	 * 添加语言路由
	 * @param lang1
	 * @param lang2
	 */
	protected void add(String lang1, String lang2){
		map.put(lang1, lang2);
	}
	
	/**
	 * 校验数据设置是否正确
	 */
	private void verity(){
		if(firstLang == null){
			throw new RuntimeException(this.getClass().getSimpleName() + " not set firstLang.");
		}
	}
	
	public abstract void init();
	 
	
	/**
	 * 获取当前语言
	 * @return
	 */
	public String getCurrLang(){
		return langIndex;
	}
	
	/**
	 * 获取下一个语言
	 * @param lang
	 * @return
	 */
	public String getNextLang(){
		if(finish){
			// 已经结束
			return null;
		}
		String nextLang = map.get(langIndex);
		if(firstLang.equals(nextLang)){
			// 到达终点
			finish = true;
		}
		else{
			langIndex = nextLang;
		}
		return nextLang;
	}
 

	public void setFirstLang(String firstLang) {
		this.firstLang = firstLang;
	}
  
}
